/**
 * Copyright (c) 2008, Noel Lynch All rights reserved. Redistribution and use
 * in source and binary forms, with or without modification, are permitted
 * provided that the following conditions are met: Redistributions of source
 * code must retain the above copyright notice, this list of conditions and the
 * following disclaimer. Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution. Neither
 * the name of Noel Lynch nor the names of contributors may be used to
 * endorse or promote products derived from this software without specific prior
 * written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.sceneworker;


import com.acarter.propertytable.celleditor.PropertySectionEditor;
import com.acarter.propertytable.celleditor.StringEditor;
import com.acarter.propertytable.cellrenderer.PropertySectionRenderer;
import com.acarter.propertytable.cellrenderer.StringRenderer;
import com.acarter.propertytable.propertyobject.StringPropertyObject;
import com.acarter.scenemonitor.SceneMonitor;
import com.acarter.scenemonitor.information.A_MonitorInformationPanel;
import com.acarter.scenemonitor.propertydescriptor.PropertyInformation;
import com.jme.animation.SpatialTransformer;
import com.jme.renderer.pass.BasicPassManager;
import com.jme.renderer.pass.Pass;
import com.jme.scene.PassNode;
import com.jme.scene.PassNodeState;
import com.jme.scene.Text;
import com.jme.scene.TriMesh;
import com.jme.scene.lod.AreaClodMesh;
import com.jme.scene.lod.ClodMesh;
import com.jme.scene.lod.DiscreteLodNode;
import com.jme.scene.shape.Arrow;
import com.jme.scene.shape.Box;
import com.jme.scene.shape.Capsule;
import com.jme.scene.shape.Cylinder;
import com.jme.scene.shape.Disk;
import com.jme.scene.shape.Dome;
import com.jme.scene.shape.PQTorus;
import com.jme.scene.shape.Pyramid;
import com.jme.scene.shape.Quad;
import com.jme.scene.shape.RoundedBox;
import com.jme.scene.shape.Sphere;
import com.jme.scene.shape.Torus;
import com.jme.scene.shape.Tube;
import com.jme.scene.state.FragmentProgramState;
import com.jme.scene.state.GLSLShaderObjectsState;
import com.jme.scene.state.TextureState;
import com.jme.scene.state.VertexProgramState;
import com.jmex.model.ogrexml.anim.MeshAnimationController;
import com.sceneworker.editors.beanshelleditor.BeanShellController;
import com.sceneworker.extensions.ExtPropertySection;
import com.sceneworker.extensions.areaclodmesh.AreaClodPropertyPage;
import com.sceneworker.extensions.arrow.ArrowPropertyPage;
import com.sceneworker.extensions.beanshellcontroller.BSHControllerPropertyEditor;
import com.sceneworker.extensions.beanshellcontroller.BSHControllerPropertyObject;
import com.sceneworker.extensions.beanshellcontroller.BSHControllerPropertyPage;
import com.sceneworker.extensions.beanshellcontroller.BSHControllerPropertyRender;
import com.sceneworker.extensions.box.BoxPropertyPage;
import com.sceneworker.extensions.capsule.CapsulePropertyPage;
import com.sceneworker.extensions.clodmesh.ClodMeshPropertyPage;
import com.sceneworker.extensions.clodmesh.TargetPropertyEditor;
import com.sceneworker.extensions.clodmesh.TargetPropertyObject;
import com.sceneworker.extensions.clodmesh.TargetPropertyRenderer;
import com.sceneworker.extensions.cylinder.CylinderPropertyPage;
import com.sceneworker.extensions.discretelodnode.DiscreteLODNodePropertyPage;
import com.sceneworker.extensions.discretelodnode.DistanceModelPropertyEditor;
import com.sceneworker.extensions.discretelodnode.DistanceModelPropertyObject;
import com.sceneworker.extensions.discretelodnode.DistanceModelPropertyRender;
import com.sceneworker.extensions.disk.DiskPropertyPage;
import com.sceneworker.extensions.dome.DomePropertyPage;
import com.sceneworker.extensions.fragmentprogramstate.FragmentProgramStateCodePropertyEditor;
import com.sceneworker.extensions.fragmentprogramstate.FragmentProgramStateCodePropertyObject;
import com.sceneworker.extensions.fragmentprogramstate.FragmentProgramStateCodePropertyRender;
import com.sceneworker.extensions.fragmentprogramstate.FragmentProgramStatePropertyPage;
import com.sceneworker.extensions.glslshaderobjectsstate.GLSLShaderObjectsStateCodePropertyEditor;
import com.sceneworker.extensions.glslshaderobjectsstate.GLSLShaderObjectsStateCodePropertyObject;
import com.sceneworker.extensions.glslshaderobjectsstate.GLSLShaderObjectsStateCodePropertyRender;
import com.sceneworker.extensions.glslshaderobjectsstate.GLSLShaderObjectsStatePropertyPage;
import com.sceneworker.extensions.meshanimationcontroller.MeshAnimationControllerPropertyPage;
import com.sceneworker.extensions.meshanimationcontroller.StringListPropertyEditor;
import com.sceneworker.extensions.meshanimationcontroller.StringListPropertyObject;
import com.sceneworker.extensions.meshanimationcontroller.StringListPropertyRenderer;
import com.sceneworker.extensions.pass.PassPropertyPage;
import com.sceneworker.extensions.passmanager.PassManagerPropertyPage;
import com.sceneworker.extensions.passnode.PassNodePropertyPage;
import com.sceneworker.extensions.passnodestate.PassNodeStatePropertyPage;
import com.sceneworker.extensions.pqtorus.PQTorusPropertyPage;
import com.sceneworker.extensions.pyramid.PyramidPropertyPage;
import com.sceneworker.extensions.quad.QuadPropertyPage;
import com.sceneworker.extensions.roundedbox.RoundedBoxPropertyPage;
import com.sceneworker.extensions.spatialtransformer.SpatialTransformerKeyframePropertyEditor;
import com.sceneworker.extensions.spatialtransformer.SpatialTransformerKeyframePropertyObject;
import com.sceneworker.extensions.spatialtransformer.SpatialTransformerKeyframePropertyRender;
import com.sceneworker.extensions.spatialtransformer.SpatialTransformerPropertyPage;
import com.sceneworker.extensions.sphere.SpherePropertyPage;
import com.sceneworker.extensions.text.TextPropertyPage;
import com.sceneworker.extensions.texturestate.ExtTexturestatePropertyPage;
import com.sceneworker.extensions.texturestate.TextureLocationPropertyEditor;
import com.sceneworker.extensions.texturestate.TextureLocationPropertyObject;
import com.sceneworker.extensions.texturestate.TextureLocationPropertyRender;
import com.sceneworker.extensions.texturestate.TextureUnitsPropertyEditor;
import com.sceneworker.extensions.texturestate.TextureUnitsPropertyObject;
import com.sceneworker.extensions.texturestate.TextureUnitsPropertyRender;
import com.sceneworker.extensions.torus.TorusPropertyPage;
import com.sceneworker.extensions.trimesh.TriMeshPropertyPage;
import com.sceneworker.extensions.trimesh.TriMeshVerticesPropertyEditor;
import com.sceneworker.extensions.trimesh.TriMeshVerticesPropertyObject;
import com.sceneworker.extensions.trimesh.TriMeshVerticesPropertyRender;
import com.sceneworker.extensions.tube.TubePropertyPage;
import com.sceneworker.extensions.vertexprogramstate.VertexProgramStateCodePropertyEditor;
import com.sceneworker.extensions.vertexprogramstate.VertexProgramStateCodePropertyObject;
import com.sceneworker.extensions.vertexprogramstate.VertexProgramStateCodePropertyRender;
import com.sceneworker.extensions.vertexprogramstate.VertexProgramStatePropertyPage;

public class SceneMonitorExtensions {

	public	void	buildGLSLShaderObjectsStateExtenstions() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(GLSLShaderObjectsState.class, new GLSLShaderObjectsStatePropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(GLSLShaderObjectsStateCodePropertyObject.class, 
					new GLSLShaderObjectsStateCodePropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(GLSLShaderObjectsStateCodePropertyObject.class, 
					new GLSLShaderObjectsStateCodePropertyRender());
		}
	}
	
	public	void	buildBeanShellControllerExtenstions() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(BeanShellController.class, new BSHControllerPropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(BSHControllerPropertyObject.class, 
					new BSHControllerPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(BSHControllerPropertyObject.class, 
					new BSHControllerPropertyRender());
		}
	}
	
	public	void	buildFragmentProgramStateExtenstions() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(FragmentProgramState.class, new FragmentProgramStatePropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(FragmentProgramStateCodePropertyObject.class, 
					new FragmentProgramStateCodePropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(FragmentProgramStateCodePropertyObject.class, 
					new FragmentProgramStateCodePropertyRender());
		}
	}
	
	public	void	buildVertexProgramStateExtenstions() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(VertexProgramState.class, new VertexProgramStatePropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(VertexProgramStateCodePropertyObject.class, 
					new VertexProgramStateCodePropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(VertexProgramStateCodePropertyObject.class, 
					new VertexProgramStateCodePropertyRender());
		}
	}
	
	public	void	buildPassNodeStateExtenstions() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(PassNodeState.class, new PassNodeStatePropertyPage());
		}
	}
	
	public	void	buildPassNodeExtenstions() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(PassNode.class, new PassNodePropertyPage());
		}
	}
	
	public	void 	buildTextExtension() {
		// To add/overwrite property pages, property cell renderers and property cell editors you need to ask 
		// for the monitor information panel.
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();

		// Because we are using the properties library, we know the information panel will be of type PropertyInformation.
		if (mip instanceof PropertyInformation) {

			PropertyInformation propInfo = (PropertyInformation) mip;

			// This is how to define new property pages. You simply register a class type to use a specific property page 
			// definition. So below, a TextPropertyPage will be shown whenever a Text object is selected in the scene 
			// graph. See TextPropertyPage.java to see what it does.
			propInfo.getPropertyPageHandler().registerPropertyPage(Text.class, new TextPropertyPage());

			// Because the property table did not implement a property object to handle strings (at the time of this writing), 
			// and we needed and defined it for use in our TextPropertyPage, we must also add the required property cell 
			// editor and renderer, otherwise we will be unable to read or edit those values. See StringEditor.java and 
			// StringRenderer.java for more info.
			propInfo.getPropertyTable().addCellEditor(StringPropertyObject.class, new StringEditor());
			propInfo.getPropertyTable().addCellRenderer(StringPropertyObject.class, new StringRenderer());
		}
	}
	
	public	void	buildTextureStateExtension() {
		// get the panel
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(TextureState.class, new ExtTexturestatePropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(ExtPropertySection.class, new PropertySectionEditor());
			propInfo.getPropertyTable().addCellRenderer(ExtPropertySection.class, new PropertySectionRenderer());
			
			propInfo.getPropertyTable().addCellEditor(TextureLocationPropertyObject.class, new TextureLocationPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(TextureLocationPropertyObject.class, new TextureLocationPropertyRender());
			
			propInfo.getPropertyTable().addCellEditor(TextureUnitsPropertyObject.class, new TextureUnitsPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(TextureUnitsPropertyObject.class, new TextureUnitsPropertyRender());
		}
	}
	
	public	void	buildTriMeshExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(TriMesh.class, new TriMeshPropertyPage());
			propInfo.getPropertyTable().addCellEditor(TriMeshVerticesPropertyObject.class, new TriMeshVerticesPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(TriMeshVerticesPropertyObject.class, new TriMeshVerticesPropertyRender());
		}
	}
	
	public	void	buildBoxExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Box.class, new BoxPropertyPage());
		}
	}
	
	public	void	buildQuadExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Quad.class, new QuadPropertyPage());
		}
	}
	
	public	void	buildSpatialTransformerExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(SpatialTransformer.class, new SpatialTransformerPropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(SpatialTransformerKeyframePropertyObject.class, new SpatialTransformerKeyframePropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(SpatialTransformerKeyframePropertyObject.class, new SpatialTransformerKeyframePropertyRender());
		}
	}
	
	public	void	buildArrowExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Arrow.class, new ArrowPropertyPage());
		}
	}
	
	public	void	buildClodMeshExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(ClodMesh.class, new ClodMeshPropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(TargetPropertyObject.class, 
					new TargetPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(TargetPropertyObject.class, 
					new TargetPropertyRenderer());
		}
	}
	
	public	void	buildAreaClodMeshExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(AreaClodMesh.class, new AreaClodPropertyPage());
		}
	}
	
	public	void	buildSphereExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Sphere.class, new SpherePropertyPage());
		}
	}
	
	public	void	buildCapsuleExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Capsule.class, new CapsulePropertyPage());
		}
	}
	
	public	void	buildDiskExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Disk.class, new DiskPropertyPage());
		}
	}
	
	public	void	buildDomeExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Dome.class, new DomePropertyPage());
		}
	}
	
	public	void	buildPQTorusExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(PQTorus.class, new PQTorusPropertyPage());
		}
	}
	
	public	void	buildPyramidExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Pyramid.class, new PyramidPropertyPage());
		}
	}
	
	public	void	buildRoundedBoxExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(RoundedBox.class, new RoundedBoxPropertyPage());
		}
	}
	
	public	void	buildTorusExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Torus.class, new TorusPropertyPage());
		}
	}
	
	public	void	buildTubeExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Tube.class, new TubePropertyPage());
		}
	}
	
	public	void	buildMeshAnimationControllerExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(MeshAnimationController.class, new MeshAnimationControllerPropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(StringListPropertyObject.class, 
					new StringListPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(StringListPropertyObject.class, 
					new StringListPropertyRenderer());
		}
	}
	
	public	void	buildDiscreteLODNodeExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(DiscreteLodNode.class, new DiscreteLODNodePropertyPage());
			
			propInfo.getPropertyTable().addCellEditor(DistanceModelPropertyObject.class, 
					new DistanceModelPropertyEditor());
			propInfo.getPropertyTable().addCellRenderer(DistanceModelPropertyObject.class, 
					new DistanceModelPropertyRender());
		}
	}
	
	public	void	buildCylinderExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Cylinder.class, new CylinderPropertyPage());
		}
	}
	
	public	void	buildPassExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(Pass.class, new PassPropertyPage());
		}
	}
	
	public	void	buildPassManagerExtension() {
		A_MonitorInformationPanel mip = SceneMonitor.getMonitor().getMonitorInformationPanel();
		
		if (mip instanceof PropertyInformation) {
			PropertyInformation propInfo = (PropertyInformation) mip;
			
			propInfo.getPropertyPageHandler().registerPropertyPage(BasicPassManager.class, new PassManagerPropertyPage());
		}
	}
}
